package com.bit.stack;

import java.util.Stack;

public class MinStack {
    private Stack<Integer> stack1=new Stack<>();
    private Stack<Integer> stack2=new Stack<>();
    public MinStack(){
     //空着就行，不需要
    }
    public void push(int val) {
        stack1.push(val);
        //针对stack2，就需要比较val和stack2的栈顶元素
        // 如果val小于等于stack2的栈顶元素，则入栈，否则不操作
        if (stack2.isEmpty()){
            stack2.push(val);
            return;
        }
        int min=stack2.peek();
        if (val<=min){
            stack2.push(val);
        }else{
            stack2.push(min);
        }
    }
    public void pop(){
        if (stack1.isEmpty()){
            return;
        }
        //把这两个站的元素都出栈
        stack1.pop();
        stack2.pop();
    }
    public int top(){
        //取正常的栈顶元素
        if (stack1.isEmpty()){
            // 由于不是 Integer, 无法返回 null. 而且右不能修改人家方法的返回值类型. 此处就返回 0 .
            return 0;
        }
        return stack1.peek();
    }
    public int getMin(){
        //取stack2的栈顶元素
        if (stack2.isEmpty()){
            return 0;
        }
        return stack2.peek();
    }
}
